import {
  Module, Global,
  DynamicModule,
} from '@nestjs/common'

// 提供者
import { CommonService } from './common.service'


@Global()
@Module({
  // 提供者
  providers: [
    CommonService,
  ],
  // 暴露
  exports: [
    CommonService
  ],
})
export class CommonModule {
  static forRoot(options: { apiKey: string }): Promise<DynamicModule> | DynamicModule {
    // 根据参数来创建一个值提供者 并将该值提供者向外暴露
    const useValueProvider = { provide: 'CONFIG', useValue: options }
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({
          module: CommonModule, // module 属性是动态模块必须的 值必须是模块类
          // 提供者
          providers: [
            useValueProvider,
          ],
          // 向外暴露的提供者
          exports: [
            useValueProvider
          ],
        })
      }, 3000)
    })
  }
}
